package xeroxware.web.common.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

import xeroxware.framework.dao.AbstractDAO;

/**
 * <pre>
 * CommonQueryDao
 * </pre>
 * 
 * @since 2013. 1. 2.
 * @author XEROXER
 */
@Repository
public class CommonQueryDAO extends AbstractDAO {

	/**
	 * 리스트 조회 처리 SQL mapping 을 실행한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @return List 형태의 조회결과
	 * @throws Exception
	 */
	public List<Map<String, Object>> selectList(String sqlId, Object parameter) throws Exception {
		return super.selectList(sqlId, parameter);
	}

	/**
	 * 단건 조회 처리 SQL mapping 을 실행한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @return resultType에서 지정한 단일 결과 객체
	 * @throws Exception
	 */
	public Object selectOne(String sqlId, Object parameter) throws Exception {
		return super.selectOne(sqlId, parameter);
	}

	/**
	 * 부분 범위 리스트 조회 처리 SQL mapping 을 실행한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param pageIndex
	 *            현재 페이지 번호
	 * @param pageSize
	 *            한 페이지 조회 수
	 * @return List 형태의 조회결과
	 * @throws Exception
	 */
	public List<Map<String, Object>> selectListWithPaging(String sqlId, int pageIndex, int pageSize) throws Exception {
		return super.selectListWithPaging(sqlId, pageIndex, pageSize);
	}

	/**
	 * 부분 범위 리스트 조회 처리 SQL mapping 을 실행한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @param pageIndex
	 *            현재 페이지 번호
	 * @param pageSize
	 *            한 페이지 조회 수
	 * @return List 형태의 조회결과
	 * @throws Exception
	 */
	public List<Map<String, Object>> selectListWithPaging(String sqlId, Object parameter, int pageIndex, int pageSize)
			throws Exception {
		return super.selectListWithPaging(sqlId, parameter, pageIndex, pageSize);
	}

	/**
	 * 입력 처리 SQL mapping 을 실행한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @return insert 처리결과 count
	 * @throws Exception
	 */
	public int insert(String sqlId, Object parameter) throws Exception {
		return super.insert(sqlId, parameter);
	}

	/**
	 * 다건 입력 처리 SQL mapping 을 실행한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param list
	 *            SQL mapping 입력 데이터를 List 형식으로 다건 세팅한 파라메터
	 * @return insert 처리결과 count
	 * @throws Exception
	 */
	public int insertRecordset(String sqlId, List<?> list) throws Exception {
		int iCount = 0;

		for (Object parameter : list) {
			iCount += super.insert(sqlId, parameter);
		}

		return iCount;
	}

	/**
	 * 수정 처리 SQL mapping 을 실행한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @return update 처리결과 count
	 * @throws Exception
	 */
	public int update(String sqlId, Object parameter) throws Exception {
		return super.update(sqlId, parameter);
	}

	/**
	 * 다건 수정 처리 SQL mapping 을 실행한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param list
	 *            SQL mapping 입력 데이터를 List 형식으로 다건 세팅한 파라메터
	 * @return update 처리결과 count
	 * @throws Exception
	 */
	public int updateRecordset(String sqlId, List<?> list) throws Exception {
		int iCount = 0;

		for (Object parameter : list) {
			iCount += super.update(sqlId, parameter);
		}

		return iCount;
	}

	/**
	 * 삭제 처리 SQL mapping 을 실행한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param parameter
	 *            SQL mapping 입력 데이터를 세팅한 파라메터
	 * @return delete 처리결과 count
	 * @throws Exception
	 */
	public int delete(String sqlId, Object parameter) throws Exception {
		return super.delete(sqlId, parameter);
	}

	/**
	 * 다건 삭제 처리 SQL mapping 을 실행한다.
	 * 
	 * @param sqlId
	 *            SQL mapping 쿼리 ID
	 * @param list
	 *            SQL mapping 입력 데이터를 List 형식으로 다건 세팅한 파라메터
	 * @return delete 처리결과 count
	 * @throws Exception
	 */
	public int deleteRecordset(String sqlId, List<?> list) throws Exception {
		int iCount = 0;

		for (Object parameter : list) {
			iCount += super.delete(sqlId, parameter);
		}

		return iCount;
	}
}
